local Script = {}

local _t_unpack = table.unpack or unpack

if not _t_unpack then
    print("error in unpack function, cannot find it")
end

local function _callp(func, op, np)
    local ap = {}
    for _, p in ipairs(op) do
        table.insert(ap, p)
    end
    for _,p in ipairs(np) do
        table.insert(ap,p)
    end
    return func(_t_unpack(ap))
end
--[[
    des:一个加强版handler 使用当前函数对象和参数，改变函数传参调用方式，构造一个新的闭包
    Ex:Handler(self.callback,self,params1,params2,...)
    return:新的函数闭包
]]
function Script.Handler(callbackFunc, ...)
    assert(callbackFunc, "Script callbackFunc is nil")

    local op = {...}

    local function localCallback(...)
        return _callp(callbackFunc, op,{...})
    end
    return localCallback
end

return Script